home *** CD-ROM | disk | FTP | other *** search
-
- Listing 11
-
- //
- // rational.cpp
- //
- #include <stdlib.h>
- #include "rational.h"
-
- rational &rational::operator+=(rational r)
- {
- num = num * r.denom + r.num * denom;
- denom *= r.denom;
- simplify();
- return *this;
- }
-
- rational &rational::operator-=(rational r)
- {
- num = num * r.denom - r.num * denom;
- denom *= r.denom;
- simplify();
- return *this;
- }
-
- rational &rational::operator*=(rational r)
- {
- num *= r.num;
- denom *= r.denom;
- simplify();
- return *this;
- }
-
- rational &rational::operator/=(rational r)
- {
- num *= r.denom;
- denom *= r.num;
- simplify();
- return *this;
- }
-
- rational rational::operator+(rational r)
- {
- rational result(*this);
- return result += r;
- }
-
- rational rational::operator-(rational r)
- {
- rational result(*this);
- return result -= r;
- }
-
- rational rational::operator*(rational r)
- {
- rational result(*this);
- return result *= r;
- }
-
- rational rational::operator/(rational r)
- {
- rational result(*this);
- return result /= r;
- }
-
- void rational::put(FILE *f)
- {
- fprintf(f, "(%ld/%ld)", num, denom);
- }
-
- long gcd(long x, long y)
- {
- x = labs(x);
- y = labs(y);
- while (x != y)
- {
- if (x < y)
- y -= x;
- if (y < x)
- x -= y;
- }
- return x;
- }
-
- void rational::simplify()
- {
- long x = gcd(num, denom);
- num /= x;
- denom /= x;
- }
-